//! # RustCloud Stream - 数据流处理框架
//!
//! 提供企业级的数据流处理能力，支持事件驱动架构和流式数据处理管道。
//! 
//! ## 核心功能
//! 
//! - **流处理管道**：高性能的数据流处理管道，支持复杂的数据转换
//! - **消息转换器**：多种数据格式转换器，支持JSON、Avro、Protobuf等
//! - **错误处理**：完整的错误处理策略，包括重试、死信队列等
//! - **容错机制**：检查点、状态恢复、故障转移等容错能力
//! - **流操作符**：丰富的流操作符，包括过滤、映射、聚合、窗口等
//! - **性能优化**：背压控制、批处理、内存管理等性能优化
//! 
//! ## 快速开始
//! 
//! ```rust
//! use rustcloud_stream::prelude::*;
//! 
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     // 创建流处理管道
//!     let pipeline = StreamPipelineBuilder::new("user-events-pipeline")
//!         .input(BusStreamSource::new("user.events.*"))
//!         .processor(FilterProcessor::new(|msg| msg.payload()["active"].as_bool().unwrap_or(false)))
//!         .processor(MapProcessor::new(|msg| transform_user_event(msg)))
//!         .output(BusStreamSink::new("processed.user.events"))
//!         .error_strategy(ErrorStrategy::DeadLetter { dlq_topic: "failed.user.events".to_string() })
//!         .build()
//!         .await?;
//!     
//!     // 启动流处理
//!     pipeline.start().await?;
//!     
//!     // 等待处理完成
//!     pipeline.wait_for_completion().await?;
//!     
//!     Ok(())
//! }
//! 
//! fn transform_user_event(message: Message) -> Message {
//!     // 自定义消息转换逻辑
//!     message
//! }
//! ```

// 错误处理模块
pub mod error;

// 核心流处理模块
pub mod core;

// 消息转换器模块
pub mod transformer;

// 错误处理策略模块（重新导出 rustcloud-resilience 功能）
pub mod error_handling;

// 死信队列模块（重新导出 rustcloud-resilience 功能）
pub mod dead_letter;

// 监控和可观测性模块（重新导出 rustcloud-observability 功能）
pub mod monitoring;

// 健康检查模块（重新导出 rustcloud-observability 功能）
pub mod health;

// 管理接口模块（重新导出 rustcloud-admin 功能）
#[cfg(feature = "admin")]
pub mod admin;

// 流处理器模块
pub mod processor;

// 窗口操作模块
pub mod window;

// 管道构建器模块
pub mod pipeline;

// 源和汇模块
pub mod source;
pub mod sink;

// 检查点模块
pub mod checkpoint;

// 配置模块
pub mod config;

// 指标和监控模块
#[cfg(feature = "metrics")]
pub mod metrics;

// 容错机制模块
pub mod resilience;

// 工具函数模块
pub mod utils;

// 预定义模块 - 导出常用类型和trait
pub mod prelude {
    pub use crate::core::*;
    pub use crate::error::*;
    pub use crate::transformer::*;
    pub use crate::error_handling::*;
    pub use crate::dead_letter::*;
    pub use crate::monitoring::*;
    pub use crate::health::*;
    pub use crate::resilience::*;
    
    #[cfg(feature = "admin")]
    pub use crate::admin::*;
    pub use crate::processor::*;
    pub use crate::window::*;
    pub use crate::pipeline::*;
    pub use crate::source::*;
    pub use crate::sink::*;
    pub use crate::checkpoint::*;
    pub use crate::config::*;
    
    // 重新导出常用外部类型
    pub use rustcloud_bus::prelude::{Message, MessageBus, Subscriber, Publisher};
    pub use rustcloud_resilience::prelude::*;
    pub use rustcloud_observability::prelude::*;
    #[cfg(feature = "admin")]
    pub use rustcloud_admin::prelude::*;
    pub use serde_json::{json, Value};
    pub use tokio_stream::{Stream, StreamExt};
    pub use futures::stream::{BoxStream, LocalBoxStream};
    pub use chrono::{DateTime, Utc};
    pub use uuid::Uuid;
}

// 导出主要类型
pub use crate::prelude::*;

// 版本信息
pub const VERSION: &str = env!("CARGO_PKG_VERSION");

// 模块初始化
pub fn init() {
    tracing::info!("RustCloud Stream v{} 已初始化", VERSION);
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_version() {
        assert!(!VERSION.is_empty());
    }

    #[test] 
    fn test_init() {
        init(); // 应该不会panic
    }
}